package com.iflytek.jcy.supervise.clue.component.httpinterface;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.dtflys.forest.annotation.*;
import com.github.pagehelper.PageInfo;
import com.iflytek.jcy.supervise.clue.component.httpinterface.uap.req.TokenDto;
import com.iflytek.sec.uap.dto.ResponseDto;
import com.iflytek.sec.uap.dto.authority.AuthorityQueryDto;
import com.iflytek.sec.uap.dto.resource.ResourceDtoWithAuthority;
import com.iflytek.sec.uap.dto.user.BatchSaveUserDto;
import com.iflytek.sec.uap.dto.validate.ValidateUserDto;
import com.iflytek.sec.uap.model.UapAuthority;
import com.iflytek.sec.uap.model.UapTokenModel;
import com.iflytek.sec.uap.model.UapUser;
import com.iflytek.sec.uap.model.UapUserOrgDetail;


/**
 * 
 * <br>
 * 标题:uap接口 <br>
 * 描述: <br>
 * 公司: www.iflytek.com<br>
 * @autho dgyu
 * @time 2022年12月12日 下午4:48:13
 */
public interface UapHttpInterface {
    /**
     * 
     * <br>
     * 适用场景:获取临时token	<br>
     * 调用方式:	<br>
     * 业务逻辑说明<br>
     *
     * @param tokenDto
     * @return
     * @autho dgyu
     * @time 2022年12月13日 下午4:26:26
     */
	@Post("#{uap.rest-server-url}#{uap.getToken}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<UapTokenModel> getToken(@JSONBody TokenDto tokenDto);
	
	/**
	 * 
	 * <br>
	 * 适用场景:获取功能权限	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param authorityQueryDto
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:26:41
	 */
	@Post("#{uap.rest-server-url}#{uap.getAuthorityList}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<PageInfo<UapAuthority>> getAuthorityList(@JSONBody AuthorityQueryDto authorityQueryDto,@Query("token") String token);
	
	/**
	 * 
	 * <br>
	 * 适用场景:根据appId和userId查询用户权限关联的资源列表	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param resourceQueryDto
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:27:05
	 */
	@Get("#{uap.rest-server-url}#{uap.getAuthResByAppIdUserId}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<List<ResourceDtoWithAuthority>> getAuthResByAppIdUserId(@Query("appId") String appId,@Query("userId") String userId,@Query("token") String token);
	
	/**
	 * 
	 * <br>
	 * 适用场景:用户验证：使用用户名、密码	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param validateUserDto
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:27:19
	 */
	@Post("#{uap.rest-server-url}#{uap.validateUser}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<UapUser> validateUser(@JSONBody ValidateUserDto validateUserDto,@Query("token") String token);
	
	/**
	 * 
	 * <br>
	 * 适用场景:根据应用编码查询应用基本信息	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param appCode
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:27:57
	 */
	@Get("#{uap.rest-server-url}#{uap.getAppByCode}/{appCode}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<JSONObject> getAppByCode(@Var("appCode") String appCode,@Query("token") String token);
	
	/**
	 * 
	 * <br>
	 * 适用场景:根据userId查询用户基本信息	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param userId
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:28:16
	 */
	@Get("#{uap.rest-server-url}#{uap.getUserDetail}{userId}#{uap.getUserDetailOrg}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<UapUserOrgDetail> getUserDetail(@Var("userId") String userId,@Query("token") String token);
	
	/**
	 * 
	 * <br>
	 * 适用场景:根据用户名查询用户基本信息（2.0跳转）	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param loginName
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:28:36
	 */
	@Get("#{uap.rest-server-url}#{uap.getUserDetailByLoginName}{loginName}#{uap.getUserDetailSystem}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<BatchSaveUserDto> getUserDetailByLoginName(@Var("loginName") String loginName,@Query("token") String token);

}
